// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the CUSTOMMOUSECLASS_EXPORTS
// symbol defined on the command line. This symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// CUSTOMMOUSECLASS_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef CUSTOMMOUSECLASS_EXPORTS
#define CUSTOMMOUSECLASS_API __declspec(dllexport)
#else
#define CUSTOMMOUSECLASS_API __declspec(dllimport)
#endif

// This class is exported from the CustomMouseClass.dll
class CUSTOMMOUSECLASS_API CCustomMouseClass {
public:
	CCustomMouseClass(void);
	// TODO: add your methods here.
};

extern CUSTOMMOUSECLASS_API int nCustomMouseClass;

CUSTOMMOUSECLASS_API int fnCustomMouseClass(void);

#include "..\Geometry\Geometry.h"

class CUSTOMMOUSECLASS_API MouseClass
{
	VectorMath::Vector3 currentPos,
		lastPos;
	bool stateLeftButton,
		stateRightButton;
public:
	MouseClass()
	{
		this->currentPos = VectorMath::Vector3();
		this->lastPos = VectorMath::Vector3();
		this->stateLeftButton = false;
		this->stateRightButton = false;
	}

	bool IsLeftButtonDown ()
	{
		return this->stateLeftButton;
	}

	bool IsRightButtonDown ()
	{
		return stateRightButton;
	}

	void PressLeftButton ()
	{
		this->stateLeftButton = true;
	}

	void ReleaseLeftButton ()
	{
		this->stateLeftButton = false;
	}

	void PressRightButton ()
	{
		this->stateRightButton = true;
	}

	void ReleaseRightButton ()
	{
		this->stateRightButton = false;
	}

	void SetCurrentPosiotion (VectorMath::Vector3 newPosition)
	{
		this->lastPos = this->currentPos;
		this->currentPos = newPosition;
	}

	VectorMath::Vector3 GetCurrentPosition()
	{
		return this->currentPos;
	}

	VectorMath::Vector3 GetLastPosition()
	{
		return this->lastPos;
	}
};